Windows7、8でUnity連携
概要
制作、販売しているUnityのAssetで、Windowsにも対応しよう、みたいな事をしていた。
具体的には、
・AssetとUnity以外を特別にインストールしない前提で
・Unityと連携して、特定のタイミングでUnityのビルドを走らせる
・メッセージを表示する
ということがしたかった。
需要が無いと思っていたし、勝手も解らなかったので、
Windows用にはそのへん用意するつもりが無かったんだが、
使ってみるとUnityにビルドさせる機構は必須だみたいな話もらったので、はい。
作る。
Unityと連携して、特定のタイミングでUnityのビルドを走らせる
UnityにそんなAPIは無い。
で、Mac側でも使った手として、アプリケーションがアクティブになるとコンパイルが走る、という特性を悪用する。
APIがあればぜひそれを使うべきだと思っているが、無い上に有用なのでしょうがない。
どのくらい有用かはこの辺を見てほしい。
WIndows用のexeで、フォーカス変更するのを作る
下記メソッドでWindowへとフォーカスを与えることが出来た。
IntPtr hWnd = FindWindow(null, windowTitle);
if (hWnd != IntPtr.Zero)
{
SetForegroundWindow(hWnd);
}
で、上記のwindowTitleをどうしようかと。
WindowsのアプリケーションごとのWindow名ってものすごい状態なのな。
プロセス名なら画一的な内容になるので、プロセス名をキーに、そのプロセスが所持している
Windowの名称を取得するようにして、無事動作した。
最終的にコマンドラインアプリケーションにできた。
SwitchApp.exe -f app_process_name -t app_process_name
アプリケーションの種類をWindowsApplicationに設定する事で、このSwitchApp自体はWindow無しで動作する。
from と to の間隔が短すぎると、Unityのビルドが始まらないことが多々あった。このへんMacとは違う。
Sleepをいれて、、、場当たり的に、、、こう、、
ただどーーーもSleepはやっぱり駄目みたいで、動いたり動かなかったりする。
このへんは暫定的に別の方法で解消した。
リポジトリ
https://github.com/sassembla/WinSwitchApp
メッセージを表示する
MacだとNotificationCenterとか、Growlとか通知系がけっこうあったので、
似たようなものを使いたく。
Win8でのToast
7ではそういうのは無い、、と思う。無理してつけてもなーもう時代おくr
で、このへんもアプリケーションにして出すと思う。